// POJ2823 Sliding Window
// 陈锋
#include <cstdio>
#include <deque>
#include <iostream>
#include <queue>
using namespace std;
// https://loj.ac/p/10175
#define _for(i, a, b) for (int i = (a); i < (int)(b); ++i)
const int NN = 1e6 + 8;
int N, K, A[NN], Q[NN];
void solve(bool inc = true) {
  int head = 0, tail = 0;  // Q[head, tail)
  _for(i, 0, N) {
    while (head < tail && Q[head] <= i - K) ++head;  // 删除过期元素
    while (head < tail &&  // 递增队列或者递减队列
           (inc ? A[Q[tail - 1]] >= A[i] : A[Q[tail - 1]] <= A[i]))
      --tail;       // 保持单调性
    Q[tail++] = i;  // 顶端是最小元素
    if (i >= K - 1) cout << A[Q[head]] << (i == N - 1 ? "\n" : " ");
  }
}
int main() {
  ios::sync_with_stdio(false), cin.tie(0);
  cin >> N >> K;
  _for(i, 0, N) cin >> A[i];
  solve();
  solve(false);
  return 0;
}
/*
算法分析请参考: 《入门经典 第2版》8.5节 滑动窗口部分
注意本题队列是使用左闭右开区间
同时也必须使用手写的队列而不是deque才能够通过时限
*/
// Accepted 8079ms 4620kB 996 G++2020-12-26 13:38:22 22232455